/*
	Dateiname: glagol.java
	Programm: glagol
	Code Hosting: http://code.google.com/p/glagol/

	Erstellt von Daria Monihart am 01/11/2008.
	Copyright Daria Monihart und Harald Monihart 2008.
	
	Letzte Änderung von Harald Monihart am 17/11/2008.

	Unicode Tabelle für kyrillische Zeichen
	0410=А	0411=Б	0412=В	0413=Г	0414=Д	0415=Е	0416=Ж	0417=З	
	0418=И	0419=Й	041a=К	041b=Л	041c=М	041d=Н	041e=О	041f=П	
	0420=Р	0421=С	0422=Т	0423=У	0424=Ф	0425=Х	0426=Ц	0427=Ч	
	0428=Ш	0429=Щ	042a=Ъ	042b=Ы	042c=Ь	042d=Э	042e=Ю	042f=Я	
	0430=а	0431=б	0432=в	0433=г	0434=д	0435=е	0436=ж	0437=з	
	0438=и	0439=й	043a=к	043b=л	043c=м	043d=н	043e=о	043f=п	
	0440=р	0441=с	0442=т	0443=у	0444=ф	0445=х	0446=ц	0447=ч	
	0448=ш	0449=щ	044a=ъ	044b=ы	044c=ь	044d=э	044e=ю	044f=я

	Zeichen nach Unicode Konvertierung:
	http://itpro.cz/juniconv/
	
	Transliterationstabelle auf welchem dieses Programm basiert:
	http://glagol.googlecode.com/files/Transliterationstabelle.pdf
	
*/

/* Importieren der benötigten Packages */
import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
 
/* Implementierung der Klasse glagol */
public class glagol 
extends JPanel 
{ 
	
 /* Deklaration der Variablen */ 
 private JTextField textCyrillic; 
 private JTextField textLatin; 

 private JButton btnLatin2Cyrillic; 
 private JButton btnCyrillic2Latin; 

 /* Implementierung des Konstruktors der Klasse glagol */
 public glagol() 
 { 
      /* Verwendung des Border Layout Managers zur Positionierung der Steuerelemente */ 
	  BorderLayout myBorderLayout = new BorderLayout(); 

	  /* Aktivierung des Border Layout Managers im Rahmen */ 
	  this.setLayout(myBorderLayout); 

	  /* Erzeugung des Panels */ 
	  Panel panel = new Panel();
	
	  /* Verwendung des Grid Layout Managers zur Positionierung der Steuerelemente */ 
	  /* Das Gitter besteht aus einer Reihe und 2 Spalten */ 
	  GridLayout panelLayout = new GridLayout(1,2); 

	  /* Aktivierung des Grid Layout Managers im Panel */ 
	  panel.setLayout(panelLayout); 

	  /* Erzeugung eines JTextFields */
	  /* mit Text Кириллица [Русский] (Kyrillisch [Russisch]) */
	  textCyrillic = new JTextField("\u041A\u0438\u0440\u0438\u043B\u043B\u0438\u0446\u0430 [\u0420\u0443\u0441\u0441\u043A\u0438\u0439]"); 

	  /* Einfügen der Beschriftungsfelder und Textfelder in das Panel */ 
	  panel.add(textCyrillic);

	  /* Einfügen des Panels in den Bereich North des Rahmens */ 
	  this.add(panel, BorderLayout.NORTH);
	
	  /* Erzeugung des Panels 2 */ 
	  Panel panel2 = new Panel(); 

	  /* Verwendung des Grid Layout Managers zur Positionierung der Steuerelemente*/ 
	  /* Das Gitter besteht aus einer Reihe und 3 Spalten */ 
	  GridLayout panel2Layout = new GridLayout(1,2); 

	  /* Aktivierung des Grid Layout Managers im Panel 2 */ 
	  panel2.setLayout(panel2Layout); 
	  
	  /* Erzeugung eines Buttons mit Beschriftung */
	  btnCyrillic2Latin = new JButton("Cyr - Lat");
      
      /* Erzeugung eines Buttons mit Beschriftung */
	  btnLatin2Cyrillic = new JButton("Lat - Cyr"); 

	  /* Einfügen der Textfelder in das Panel 2 */ 
      panel2.add(btnCyrillic2Latin);
	  panel2.add(btnLatin2Cyrillic);
			
	  /* Einfügen des Panels 2 in den Bereich Center des Rahmens */ 
	  this.add(panel2, BorderLayout.CENTER);
	
	  /* Erzeugung des Panels 3 */ 
	  Panel panel3 = new Panel();

	  /* Verwendung des Grid Layout Managers zur Positionierung der Steuerelemente*/ 
	  /* Das Gitter besteht aus einer Reihe und 2 Spalten */ 
	  GridLayout panel3Layout = new GridLayout(1,2); 

	  /* Aktivierung des Grid Layout Managers im Panel 3 */ 
	  panel3.setLayout(panel3Layout); 

	  /*Erzeugung eines JTextFields */
	  textLatin = new JTextField("Lateinisch"); 

	  /* Einfügen der Beschriftungsfelder und Textfelder in das Panel3 */ 
	  panel3.add(textLatin);

	  /* Einfügen des Panels 3 in den Bereich South des Rahmens */ 
	  this.add(panel3, BorderLayout.SOUTH);
  
      /* Das Textfeld zur Eingabe der kyrillischen Zeichen fordert den Focus an */ 
      textLatin.requestFocus();


	  /* Button beim ActionListener registrieren */
	  btnCyrillic2Latin.addActionListener(new ActionListener() 
	  { 
	   /* Überschreiben der Methode actionPerformed() */
	   public void actionPerformed(ActionEvent e) 
	   {
		 /* Zeichen werden aus dem Textfeld mit kyrillischen Buchstaben in ein Character-Array */
		 /* kopiert, um diese einzeln zu verarbeiten */
		 char[] cInputArray = textCyrillic.getText().toCharArray();

		 /* der Ausgabe String wird initialisiert */
		 String cOutputArray ="";

		 /* jedes Zeichen wird anhand der Transliterationstabelle uebersetzt */
		 for (char c : cInputArray)			
			switch (c) {
						case '\u0410': cOutputArray = cOutputArray + "A"; break;
						case '\u0430': cOutputArray = cOutputArray + "a"; break;
						case '\u0411': cOutputArray = cOutputArray + "B"; break;
						case '\u0431': cOutputArray = cOutputArray + "b"; break;
						case '\u0412': cOutputArray = cOutputArray + "V"; break;
						case '\u0432': cOutputArray = cOutputArray + "v"; break;
						case '\u0413': cOutputArray = cOutputArray + "G"; break;
						case '\u0433': cOutputArray = cOutputArray + "g"; break;
						case '\u0414': cOutputArray = cOutputArray + "D"; break;
						case '\u0434': cOutputArray = cOutputArray + "d"; break;
						case '\u0415': cOutputArray = cOutputArray + "\u00CA"; break;
						case '\u0435': cOutputArray = cOutputArray + "\u00EA"; break;
						case '\u0401': cOutputArray = cOutputArray + "\u00D4"; break;
						case '\u0451': cOutputArray = cOutputArray + "\u00F4"; break;
						case '\u0416': cOutputArray = cOutputArray + "\u017D"; break;
						case '\u0436': cOutputArray = cOutputArray + "\u017E"; break;
						case '\u0417': cOutputArray = cOutputArray + "Z"; break;
						case '\u0437': cOutputArray = cOutputArray + "z"; break;
						case '\u0418': cOutputArray = cOutputArray + "I"; break;
						case '\u0438': cOutputArray = cOutputArray + "i"; break;
						case '\u0419': cOutputArray = cOutputArray + "Y"; break;
						case '\u0439': cOutputArray = cOutputArray + "y"; break;
						case '\u041A': cOutputArray = cOutputArray + "K"; break;
						case '\u043A': cOutputArray = cOutputArray + "k"; break;
						case '\u041B': cOutputArray = cOutputArray + "L"; break;
						case '\u043B': cOutputArray = cOutputArray + "l"; break;
						case '\u041C': cOutputArray = cOutputArray + "M"; break;
						case '\u043C': cOutputArray = cOutputArray + "m"; break;
						case '\u041D': cOutputArray = cOutputArray + "N"; break;
						case '\u043D': cOutputArray = cOutputArray + "n"; break;
						case '\u041E': cOutputArray = cOutputArray + "O"; break;
						case '\u043E': cOutputArray = cOutputArray + "o"; break;
						case '\u041F': cOutputArray = cOutputArray + "P"; break;
						case '\u043F': cOutputArray = cOutputArray + "p"; break;
						case '\u0420': cOutputArray = cOutputArray + "R"; break;
						case '\u0440': cOutputArray = cOutputArray + "r"; break;
						case '\u0421': cOutputArray = cOutputArray + "S"; break;
						case '\u0441': cOutputArray = cOutputArray + "s"; break;
						case '\u0422': cOutputArray = cOutputArray + "T"; break;
						case '\u0442': cOutputArray = cOutputArray + "t"; break;
						case '\u0423': cOutputArray = cOutputArray + "U"; break;
						case '\u0443': cOutputArray = cOutputArray + "u"; break;
						case '\u0424': cOutputArray = cOutputArray + "F"; break;
						case '\u0444': cOutputArray = cOutputArray + "f"; break;
						case '\u0425': cOutputArray = cOutputArray + "H"; break;
						case '\u0445': cOutputArray = cOutputArray + "h"; break;
						case '\u0426': cOutputArray = cOutputArray + '\u010C'; break;
						case '\u0446': cOutputArray = cOutputArray + '\u010D'; break;
						case '\u0427': cOutputArray = cOutputArray + '\u0108'; break;
						case '\u0447': cOutputArray = cOutputArray + '\u0109'; break;
						case '\u0428': cOutputArray = cOutputArray + '\u0160'; break;
						case '\u0448': cOutputArray = cOutputArray + '\u0161'; break;						
						case '\u0429': cOutputArray = cOutputArray + '\u015C'; break;
						case '\u0449': cOutputArray = cOutputArray + '\u015D'; break;
						case '\u042A': cOutputArray = cOutputArray + "J"; break;
						case '\u044A': cOutputArray = cOutputArray + '\u01F0'; break;
						case '\u042B': cOutputArray = cOutputArray + '\u01CF'; break;
						case '\u044B': cOutputArray = cOutputArray + '\u01D0'; break;
						case '\u042C': cOutputArray = cOutputArray + '\u0134'; break;
						case '\u044C': cOutputArray = cOutputArray + '\u0135'; break;
						case '\u042D': cOutputArray = cOutputArray + "E"; break;
						case '\u044D': cOutputArray = cOutputArray + "e"; break;
						case '\u042E': cOutputArray = cOutputArray + '\u00DB'; break;
						case '\u044E': cOutputArray = cOutputArray + '\u00FB'; break;
						case '\u042F': cOutputArray = cOutputArray + '\u00C2'; break;
						case '\u044F': cOutputArray = cOutputArray + '\u00E2'; break;
			            /* Ist das Zeichen nicht im Alphabet enthalten, z.B.: ein Sonderzeichen, */
						/* wird es nicht übersetzt sondern direkt in den Ausgabe-String kopiert */ 
						default: cOutputArray = cOutputArray + c; break;
			        }

		/* Ausgabe des translitierten Textes in das Textfeld*/ 
		textLatin.setText(cOutputArray);
	   }
	  });
	
	  /* Button beim ActionListener registrieren */
	  btnLatin2Cyrillic.addActionListener(new ActionListener() 
	  { 
	   /* Überschreiben der Methode actionPerformed() */
	   public void actionPerformed(ActionEvent e) 
	   { 
		 /* Zeichen werden aus dem Textfeld mit lateinischen Buchstaben in ein Character-Array */
		 /* kopiert, um diese einzeln zu verarbeiten */
		 char[] cInputArray = textLatin.getText().toCharArray();

		 /* der Ausgabe String wird initialisiert */
		 String cOutputArray ="";

		/* jedes Zeichen wird anhand der Transliterationstabelle uebersetzt */
		 for (char c : cInputArray)			
			switch (c) {
						case 'A': cOutputArray = cOutputArray + '\u0410'; break;
						case 'a': cOutputArray = cOutputArray + '\u0430'; break;
						case 'B': cOutputArray = cOutputArray + '\u0411'; break;
						case 'b': cOutputArray = cOutputArray + '\u0431'; break;
						case 'V': cOutputArray = cOutputArray + '\u0412'; break;
						case 'v': cOutputArray = cOutputArray + '\u0432'; break;
						case 'G': cOutputArray = cOutputArray + '\u0413'; break;
						case 'g': cOutputArray = cOutputArray + '\u0433'; break;
						case 'D': cOutputArray = cOutputArray + '\u0414'; break;
						case 'd': cOutputArray = cOutputArray + '\u0434'; break;
						case '\u00CA': cOutputArray = cOutputArray +  '\u0415'; break;
						case '\u00EA': cOutputArray = cOutputArray +  '\u0435'; break;
						case '\u00D4' : cOutputArray = cOutputArray + '\u0401'; break;
						case '\u00F4' : cOutputArray = cOutputArray + '\u0451'; break;
						case '\u017D' : cOutputArray = cOutputArray + '\u0416'; break;
						case '\u017E': cOutputArray = cOutputArray +  '\u0436'; break;
						case 'Z': cOutputArray = cOutputArray + '\u0417'; break;
						case 'z': cOutputArray = cOutputArray + '\u0437'; break;
						case 'I': cOutputArray = cOutputArray + '\u0418'; break;
						case 'i': cOutputArray = cOutputArray + '\u0438'; break;
						case 'Y': cOutputArray = cOutputArray + '\u0419'; break;
						case 'y': cOutputArray = cOutputArray + '\u0439'; break;
						case 'K': cOutputArray = cOutputArray + '\u041A'; break;
						case 'k': cOutputArray = cOutputArray + '\u043A'; break;
						case 'L': cOutputArray = cOutputArray + '\u041B'; break;
						case 'l': cOutputArray = cOutputArray + '\u043B'; break;
						case 'M': cOutputArray = cOutputArray + '\u041C'; break;
						case 'm': cOutputArray = cOutputArray + '\u043C'; break;
						case 'N': cOutputArray = cOutputArray + '\u041D'; break;
						case 'n': cOutputArray = cOutputArray + '\u043D'; break;
						case 'O': cOutputArray = cOutputArray + '\u041E'; break;
						case 'o': cOutputArray = cOutputArray + '\u043E'; break;
						case 'P': cOutputArray = cOutputArray + '\u041F'; break;
						case 'p': cOutputArray = cOutputArray + '\u043F'; break;
						case 'R': cOutputArray = cOutputArray + '\u0420'; break;
						case 'r': cOutputArray = cOutputArray + '\u0440'; break;
						case 'S': cOutputArray = cOutputArray + '\u0421'; break;
						case 's': cOutputArray = cOutputArray + '\u0441'; break;
						case 'T': cOutputArray = cOutputArray + '\u0422'; break;
						case 't': cOutputArray = cOutputArray + '\u0442'; break;
						case 'U': cOutputArray = cOutputArray + '\u0423'; break;
						case 'u': cOutputArray = cOutputArray + '\u0443'; break;
						case 'F': cOutputArray = cOutputArray + '\u0424'; break;
						case 'f': cOutputArray = cOutputArray + '\u0444'; break;
						case 'H': cOutputArray = cOutputArray + '\u0425'; break;
						case 'h': cOutputArray = cOutputArray + '\u0445'; break;
						case '\u010C': cOutputArray = cOutputArray + '\u0426'; break;
						case '\u010D': cOutputArray = cOutputArray + '\u0446'; break;
						case '\u0108': cOutputArray = cOutputArray + '\u0427'; break;
						case '\u0109': cOutputArray = cOutputArray + '\u0447'; break;
						case '\u0160': cOutputArray = cOutputArray + '\u0428'; break;
						case '\u0161': cOutputArray = cOutputArray + '\u0448'; break;						
						case '\u015C': cOutputArray = cOutputArray + '\u0429'; break;
						case '\u015D': cOutputArray = cOutputArray + '\u0449'; break;
						case 'J': cOutputArray = cOutputArray + '\u042A'; break;
						case '\u01F0': cOutputArray = cOutputArray + '\u044A'; break;
						case '\u01CF': cOutputArray = cOutputArray + '\u042B'; break;
						case '\u01D0': cOutputArray = cOutputArray + '\u044B'; break;
						case '\u0134': cOutputArray = cOutputArray + '\u042C'; break;
						case '\u0135': cOutputArray = cOutputArray + '\u044C'; break;
						case 'E': cOutputArray = cOutputArray + '\u042D'; break;
						case 'e': cOutputArray = cOutputArray + '\u044D'; break;
						case '\u00DB': cOutputArray = cOutputArray + '\u042E'; break;
						case '\u00FB': cOutputArray = cOutputArray + '\u044E'; break;
						case '\u00C2': cOutputArray = cOutputArray + '\u042F'; break;
						case '\u00E2': cOutputArray = cOutputArray + '\u044F'; break;
						/* Ist das Zeichen nicht im Alphabet enthalten, z.B.: ein Sonderzeichen, */
						/* wird es nicht übersetzt sondern direkt in den Ausgabe-String kopiert */
			            default: cOutputArray = cOutputArray + c; break;
			        }
			
		/* Ausgabe des translitierten Textes in das Textfeld mit kyrillischen Zeichen*/ 
		textCyrillic.setText(cOutputArray);
	   }
	  }); 
		

 } 

 /* Implementierung der Startmethode main() */
 public static void main(String[] args) 
 { 
  /* erzeugt Fenster */
  JFrame frame = new JFrame("glagol"); 

  /* Dem Contentpane wird das Panel hinzugefügt */
  frame.getContentPane().add(new glagol()); 

  /* Festlegung der Position des Rahmens am Desktop */ 
  /* Die x Koordinate der linken oberen Ecke des Rahmens hat den Wert 300 Pixel */ 
  /* Die y Koordinate der linken oberen Ecke des Rahmens hat den Wert 200 Pixel */ 
  frame.setLocation(300, 200);

  /* Fenstergrösse: Breite 400 Pixel, Höhe 110 Pixel */
  frame.setSize(400, 110); 
  
  /* Fenstergrösse nicht veränderbar */
  frame.setResizable(false);
	
  /* Sichtbarkeit auf true setzen */
  frame.setVisible(true); 

  /* Registrierung beim WindowListener, 
  /* damit das Fenster geschlossen werden kann */
  frame.addWindowListener(new WindowAdapter() 
  { 
   public void windowClosing(WindowEvent e)  
   { 
    /* Beenden der JVM und damit der Java Applikation mit Status 0 */
    System.exit(0); 
   } 
  }); 
 } 
}